Kodowanie Windows-1250, konce wiersza CR+LF, test: zażółć gęślą jaźń Autor: Adam Sawicki regedit@regedit.gamedev__USUN__.pl http://regedit.gamedev.pl/ Problem ================================================================================ Problem jest następujący: Apache ma wyświetlać strony WWW - główną z jakiegoś katalogu (dajmy na to że /www) oraz strony użytkowników z /home/LOGIN/public_html. Apache działa jako użytkownik "apache" i nie ma dostępu do tych katalogów. Rozwiązanie 1: Żeby mu je dać, trzebaby zrobić dla tych katalogów rekurencyjnie chown 755 (katalogi) i 744 (pliki). Tak też się robi, bo takie właśnie uprawnienia widzę do swoich plików na wielu kontach WWW. WADA: Wtedy inni użytkownicy posiadający konta shellowe na tym serwerze mogą też podglądać zawartość katalogów, a nawet treść plików innych użytkowników, w tym kod źródłowy skryptów PHP, w których jak wiadomo można znaleźć wiele tajnych informacji. Rozwiązanie 2: Przypisać katalog public_html do grupy apache, tak żeby jego właścicielem był dany użytkownik ale grupą apache i nadać mu rekurencyjnie uprawnienia 770. WADA: To samo nie wystarczy zastosować do katalogu public_html, trzeba też do całego katalogu domowej użytkownika /home/LOGIN. Rozwiązanie 3: Dodać użytkowników poszczególnych kont shellowych do grupy apache, będącej główną grupą konta apache oraz zmienić chmod 770 rekurencyjnie dla public_html, a także dla katalogu głównego konta. WADA: Brzmi dobrze, ale niestety nie zadziałało. Rozwiązanie 4: Rozwiązanie od DJ_cool_ (dzięki stary!): Użytkownicy są przypisani do grupy users zamiast każdy do swojej. usermod -g users login jedna grupa dla użytkowników na home chown login.users /home/login -R chmod 701 na /home/login 705 na /home/login/public_html a jak trzeba uprawnienia zapisu (jakieś wysypiska przykładowo) 707 ale mam tez zmienic ze userzy naleza do grupy users? a nie kazdy do swojej tak Nadać rekurencyjnie public_html oraz katalogowi głównemu konta chmod 707, a wszystkich użytkowników (tych żywych, nie apache itp.) przypisać do jednej grupy głównej users zamiast każdego do swojej. W ten sposób apache i inne takie programy mają dostęp do tego co trzeba, a pozostali żywi użytkownicy nie mają. Tak podobno robi domyślnie Slackware. To zadziałało, ale jak taki user tworzy sobie na shellu plik albo katalog to on ma uprawnienia LOGIN:LOGIN zamiast LOGIN:users i co gorsza ten użytkownik nie może tego zmienić! Rozwiązanie 5: Dodać użytkownika apache do grup dodatkowych każdego użytkownika (bo każdy użytkownik ma swoją grupę o takiej samej nazwie). Nie zadziałało. Dodatkowo: Jakie uprawnienia i jakiego właściciela będzie miał plik czy katalog nowostworzony pod public_html przez użytkownika danego shella: 1. za pomocą komend shella 2. za pomocą FTP? Czy będą one od razu poprawne? Uwaga! Ktokolwiek zna najlepsze/prawidłowe rozwiązanie tego problemu, proszony jest o kontakt. Rozwiązanie ================================================================================ Udało się to zrobić. Dokładny opis sytuacji: Domyślnie jest tak ================== (Przynajmniej w dystrybucji Fedora Core) Jest użytkownik apache i grupa apache, do której on należy. To właśnie z uprawnieniami tego użytkownika uruchamia się serwer httpd. Nowotworzone konta użytkowników mają tworzone własne grupy, i tak useradd tester doda użytkownika tester należącego do automatycznie utworzonej przy tej okazji grupy tester. Nowotworzone pliki i katalogi, tak przez FTP jak i z poziomu poleceń powłoki, mają domyślnie uprawnienia: katalogi rwxrwxrwx (777), pliki rw-rw-rw- (666). Od tych uprawnień odejmowane są te które są ustawione jako umask, odpowiednio w shellu (nie wiem gdzie się ustawia domyślny umask) oraz w konfiguracji vsftpd. W obydwu przypadkach jest to maska 0022 (czyli na w), co sprawia, że ostatecznie tworzone obydwoma metodami katalogi mają domyślnie rwxr-xr-x (755), a pliki rw-r--r-- (744). Co do właściciela i grupy tworzonych plików i katalogów, jest on taki jak użytkownik i grupa PROCESU, który je twórzy. Co zrobić ========= Pośród grup istnieje już grupa users. Na nią zmienić grupę, do której należą konta wszystkich użytkowników i uą ustawiać jako grupę każdego tworzonego użytkownika, zamiast jego własnej. Zrobić też na ich pliki: chown -R LOGIN:users /home/LOGIN Wówczas użytkownik który nie chce żeby jego pliki mogli podglądać inni użytkownicy nada im uprawnienia np. takie: chmod -R 705 /home/LOGIN/public_html lub 707 jeśli chce, żeby Apache mógł też zapisywać. W ten sposób jego pliki są widoczne dla Apache i innych usług systemowych, a nie są dla innych użytkowników komputera, ponieważ ci należą do grupy users - tej samej co użytkownik. Wgrywanie plików przez FTP i tworzenie przez shell też działa dobrze, tylko przypisuje też uprawnienia dla grupy i trzeba je potem zmienić żeby grupa nie miała dostępu.